package helloRoom;

import com.alibaba.fastjson.JSONObject;
import org.tio.client.AioClient;
import org.tio.client.ClientChannelContext;
import org.tio.client.ClientGroupContext;
import org.tio.client.ReconnConf;
import org.tio.client.intf.ClientAioHandler;
import org.tio.client.intf.ClientAioListener;
import org.tio.core.Aio;
import org.tio.core.Node;

import java.util.Scanner;

/**
 * Created by yunqisong on 2017/08/31.
 */
public class RoomClientStarter {
    // 服务器节点
    public static Node serverNode = new Node("127.0.0.1", RoomConst.PORT);

    // handler, 包括编码、解码、消息处理
    public static ClientAioHandler aioClientHandler = new RoomClientHandler();

    // 事件监听器，可以为null，但建议自己实现该接口，可以参考showcase了解些接口
    public static ClientAioListener aioListener = null;

    // 断链后自动连接的，不想自动连接请设为null
    private static ReconnConf reconnConf = new ReconnConf(5000L);

    // 一组连接共用的上下文对象
    public static ClientGroupContext clientGroupContext = new ClientGroupContext(aioClientHandler, aioListener, reconnConf);

    public static AioClient aioClient = null;
    public static ClientChannelContext clientChannelContext = null;

    /**
     * 启动程序入口
     */
    public static void main(String[] args) throws Exception {
        clientGroupContext.setHeartbeatTimeout(RoomConst.TIMEOUT);
        aioClient = new AioClient(clientGroupContext);
        clientChannelContext = aioClient.connect(serverNode);
        //连上后，发条消息玩玩
        Scanner scanner = new Scanner(System.in);
        while (true) {
            String msg = scanner.nextLine();
            send(msg);
        }
    }

    private static void send(String msg) throws Exception {
        RoomPacket packet = RoomPacket.builder()
                .body(JSONObject.toJSONString(
                        RoomAgreement.builder().me("雲栖鬆")
                                .to("泉凝月")
                                .msg(msg).build()
                ).getBytes(RoomConst.CHARSET)).build();
        Aio.send(clientChannelContext, packet);
    }
}
